package com.killer.util;

import java.io.File;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

/**
 * @author ：Killer
 * @date ：Created in 20-10-26 上午10:48
 * @description：${description}
 * @modified By：
 * @version: version
 */
public class PackageSacanUtil {

    /**
     * 扫描某个包及子包，返回所有的class类的权限定类名
     * @param packageName
     * @return
     */
    public static List<String> scanPackage(String packageName){
        List<String> classNames=new ArrayList<String>();
        URL url = Thread.currentThread().getContextClassLoader().getResource(packageName.replaceAll("\\.", "/"));
        String path=url.getPath();
        File file = new File(path);
        if (!file.exists()) {
            throw new RuntimeException("对应的包文件不存在");
        }
        //列出子文件
        File[] childFiles = file.listFiles();
        for (File childFile : childFiles) {
            if (childFile.isDirectory()) {
                String newPackName=packageName+"."+childFile.getName();
                classNames.addAll(scanPackage(newPackName));
            }else{
                if (childFile.getName().endsWith(".class")) {
                    String name = childFile.getName().substring(0, childFile.getName().lastIndexOf("."));
                    classNames.add(packageName + "." + name);
                }
            }
        }
        return classNames;
    }
}
